/**
 * 管理员数据模型
 */

const BaseModel = require('../../../framework/platform/model/base_model.js');

class AdminModel extends BaseModel {

	constructor() {
		super('oa_admin');
		
		// 直接设置表名，而不是调用setModel方法
		this.TABLE = 'oa_admin';
		
		// 定义字段结构
		this.DB_STRUCTURE = {
			ADMIN_ID: 'string|true',
			ADMIN_NAME: 'string|true',
			ADMIN_PASSWORD: 'string|true', 
			ADMIN_DESC: 'string|false',
			ADMIN_TYPE: 'int|true|default=0',
			ADMIN_STATUS: 'int|true|default=1',
			ADMIN_PHONE: 'string|false',
			ADMIN_TOKEN: 'string|false',
			ADMIN_TOKEN_TIME: 'int|false',
			ADMIN_LOGIN_TIME: 'int|false',
			ADMIN_LOGIN_CNT: 'int|true|default=0',
			ADMIN_ADD_TIME: 'int|true',
			ADMIN_EDIT_TIME: 'int|true',
			ADMIN_ADD_IP: 'string|false',
			ADMIN_EDIT_IP: 'string|false',
		};
	}

	/**
	 * 获取管理员
	 * @param {*} where 条件
	 * @param {*} fields 字段
	 * @returns 管理员
	 */
	async getAdmin(where, fields = '*') {
		return await this.getOne(where, fields);
	}

	/**
	 * 管理员是否存在
	 * @param {*} where 条件
	 * @returns 是否存在
	 */
	async isExist(where) {
		let count = await this.count(where);
		return count > 0;
	}

	/**
	 * 计算符合条件的记录数量
	 * @param {*} where 查询条件
	 * @returns 记录数量
	 */
	async count(where) {
		return (await this.getCollection().where(where).count()).total;
	}

	/**
	 * 创建索引
	 * @param {*} indexObj 索引对象
	 */
	async createIndex(indexObj) {
		try {
			return await this.getCollection().createIndex(indexObj);
		} catch (error) {
			console.error('创建索引失败:', error);
			return null;
		}
	}

	/**
	 * 管理员列表
	 * @param {*} where 条件
	 * @param {*} fields 字段
	 * @param {*} orderBy 排序
	 * @param {*} page 页码
	 * @param {*} size 分页大小
	 * @param {*} isTotal 是否计算总数
	 * @param {*} oldTotal 旧总数
	 * @returns 管理员列表
	 */
	async getAdminList(where, fields, orderBy, page, size, isTotal, oldTotal) {
		return await this.getList(where, fields, orderBy, page, size, isTotal, oldTotal);
	}
}

/**
 * 静态方法 - 获取单条记录
 * @param {*} where 查询条件
 * @param {*} fields 字段
 * @param {*} orderBy 排序
 * @returns 单条记录
 */
AdminModel.getOne = async function(where, fields = '*', orderBy = {}) {
    try {
        const instance = new AdminModel();
        return await instance.getOne(where, fields, orderBy);
    } catch (err) {
        console.error('获取管理员记录失败', err);
        return null;
    }
};

/**
 * 静态方法 - 获取列表
 * @param {*} where 查询条件
 * @param {*} fields 字段
 * @param {*} orderBy 排序
 * @param {*} page 页码
 * @param {*} size 分页大小
 * @param {*} isTotal 是否计算总数
 * @param {*} oldTotal 旧总数
 * @returns 列表结果
 */
AdminModel.getList = async function(where, fields = '*', orderBy = {}, page = 1, size = 10, isTotal = true, oldTotal = 0) {
    try {
        const instance = new AdminModel();
        return await instance.getList(where, fields, orderBy, page, size, isTotal, oldTotal);
    } catch (err) {
        console.error('获取管理员列表失败', err);
        return { total: 0, list: [] };
    }
};

/**
 * 静态方法 - 插入记录
 * @param {*} data 数据
 * @returns 插入结果
 */
AdminModel.insert = async function(data) {
    try {
        const instance = new AdminModel();
        return await instance.insert(data);
    } catch (err) {
        console.error('插入管理员记录失败', err);
        return null;
    }
};

/**
 * 静态方法 - 编辑记录
 * @param {*} where 查询条件
 * @param {*} data 数据
 * @returns 编辑结果
 */
AdminModel.edit = async function(where, data) {
    try {
        const instance = new AdminModel();
        return await instance.edit(where, data);
    } catch (err) {
        console.error('编辑管理员记录失败', err);
        return null;
    }
};

/**
 * 静态方法 - 删除记录
 * @param {*} where 查询条件
 * @returns 删除结果
 */
AdminModel.del = async function(where) {
    try {
        const instance = new AdminModel();
        return await instance.del(where);
    } catch (err) {
        console.error('删除管理员记录失败', err);
        return null;
    }
};

/**
 * 静态方法 - 计数
 * @param {*} where 查询条件
 * @returns 计数结果
 */
AdminModel.count = async function(where) {
    try {
        const instance = new AdminModel();
        return await instance.count(where);
    } catch (err) {
        console.error('计数管理员记录失败', err);
        return 0;
    }
};

/**
 * 静态方法 - 创建索引
 * @param {*} indexObj 索引对象
 */
AdminModel.createIndex = async function(indexObj) {
    try {
        const instance = new AdminModel();
        return await instance.createIndex(indexObj);
    } catch (err) {
        console.error('创建索引失败', err);
        return null;
    }
};

// 导出类而不是实例，使模型配置能够正确识别
module.exports = AdminModel; 